import { useEffect } from 'react';
import { useDebounce } from './useDebounce';

/**
 * 窗口尺寸变化监听的通用 hooks
 * @param callback 窗口尺寸变化时的回调函数
 * @param delay 防抖延迟时间（毫秒），默认 300ms
 * @param immediate 是否立即执行一次回调，默认 false
 */
export function useResize(
  callback: () => void,
  delay: number = 300,
  immediate: boolean = false
) {
  // 创建防抖的回调函数
  const debouncedCallback = useDebounce(callback, delay);

  useEffect(() => {
    // 如果设置了立即执行，先执行一次
    if (immediate) {
      callback();
    }

    // 监听窗口尺寸变化
    window.addEventListener('resize', debouncedCallback);

    // 清理函数
    return () => {
      window.removeEventListener('resize', debouncedCallback);
    };
  }, [debouncedCallback, callback, immediate]);
}
